like this:
[reftest]
- accepted-diff-level=2
- accepted-diff-pixels=100
tolerated-diff-level=20
tolerated-diff-pixels=1000
-If the number of pixels that differ from the reference is no more than
-accepted-diff-pixels, and each channel in each of those pixels differs
-from the reference by no more than accepted-diff-level, then we consider
-that to be a full success, and don't even save the .diff.png for
-analysis.
-
-If that check fails, but the number of pixels that differ is no more
+If the image differs, but the number of pixels that differ is no more
than tolerated-diff-pixels and the differences are no more than
tolerated-diff-level, then we treat it as a success with warnings, save
the .diff.png for analysis, and use g_test_incomplete() to record the
Forwarded: https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/3195
Applied-upstream: no, upstream want reftests to be a strict pass/fail with identical results required
---
- testsuite/gsk/compare-render.c | 43 ++++++++++++++++++++++++++++++++++++--
- testsuite/reftests/gtk-reftest.c | 43 ++++++++++++++++++++++++++++++++++++--
+ testsuite/gsk/compare-render.c | 31 ++++++++++++++++++++++++++++++-
+ testsuite/reftests/gtk-reftest.c | 32 +++++++++++++++++++++++++++++++-
testsuite/reftests/image-compare.c | 2 +-
- 3 files changed, 83 insertions(+), 5 deletions(-)
+ 3 files changed, 62 insertions(+), 3 deletions(-)
diff --git a/testsuite/gsk/compare-render.c b/testsuite/gsk/compare-render.c
-index da6f9e2..a4afd75 100644
+index da6f9e2..237b8c4 100644
--- a/testsuite/gsk/compare-render.c
+++ b/testsuite/gsk/compare-render.c
@@ -98,6 +98,12 @@ get_output_file (const char *file,
static void
save_image (cairo_surface_t *surface,
const char *test_name,
-@@ -242,12 +248,45 @@ main (int argc, char **argv)
+@@ -242,12 +248,35 @@ main (int argc, char **argv)
if (diff_surface)
{
+ GKeyFile *keyfile = g_key_file_new ();
+ guint64 tolerated_diff = 0;
+ guint64 tolerated_pixels = 0;
-+ guint64 accepted_diff = 0;
-+ guint64 accepted_pixels = 0;
+
+ if (keyfile_path != NULL && g_file_test (keyfile_path, G_FILE_TEST_EXISTS))
+ {
+ GError *error = NULL;
+ g_key_file_load_from_file (keyfile, keyfile_path, G_KEY_FILE_NONE, &error);
+ g_assert_no_error (error);
-+ accepted_diff = g_key_file_get_uint64 (keyfile, "reftest", "accepted-diff-level", NULL);
-+ g_print ("Maximum difference accepted: %" G_GUINT64_FORMAT " levels\n", accepted_diff);
-+ accepted_pixels = g_key_file_get_uint64 (keyfile, "reftest", "accepted-diff-pixels", NULL);
-+ g_print ("Different pixels accepted: %" G_GUINT64_FORMAT "\n", accepted_pixels);
+ tolerated_diff = g_key_file_get_uint64 (keyfile, "reftest", "tolerated-diff-level", NULL);
+ g_print ("Maximum difference tolerated: %" G_GUINT64_FORMAT " levels\n", tolerated_diff);
+ tolerated_pixels = g_key_file_get_uint64 (keyfile, "reftest", "tolerated-diff-pixels", NULL);
g_print ("%u (out of %u) pixels differ from reference by up to %u levels\n",
pixels_changed, pixels, max_diff);
-- save_image (diff_surface, node_file, ".diff.png");
-+ if (max_diff > accepted_diff || pixels_changed > accepted_pixels)
-+ save_image (diff_surface, node_file, ".diff.png");
-+
+ save_image (diff_surface, node_file, ".diff.png");
cairo_surface_destroy (diff_surface);
- success = FALSE;
+
-+ if (max_diff <= accepted_diff && pixels_changed <= accepted_pixels)
-+ g_print ("differences are within acceptable range\n");
-+ else if (max_diff <= tolerated_diff && pixels_changed <= tolerated_pixels)
-+ g_print ("not right, but close enough\n");
++ if (max_diff <= tolerated_diff && pixels_changed <= tolerated_pixels)
++ g_print ("not right, but close enough?\n");
+ else
+ g_test_fail ();
+
}
diff --git a/testsuite/reftests/gtk-reftest.c b/testsuite/reftests/gtk-reftest.c
-index 6ef17aa..791e95c 100644
+index 6ef17aa..3ef6d32 100644
--- a/testsuite/reftests/gtk-reftest.c
+++ b/testsuite/reftests/gtk-reftest.c
@@ -290,6 +290,12 @@ save_image (cairo_surface_t *surface,
static void
test_ui_file (GFile *file)
{
-@@ -326,10 +332,43 @@ test_ui_file (GFile *file)
+@@ -326,10 +332,34 @@ test_ui_file (GFile *file)
if (diff_image)
{
+ GKeyFile *keyfile = g_key_file_new ();
+ guint64 tolerated_diff = 0;
+ guint64 tolerated_pixels = 0;
-+ guint64 accepted_diff = 0;
-+ guint64 accepted_pixels = 0;
+
+ if (keyfile_path != NULL)
+ {
+ GError *error = NULL;
+ g_key_file_load_from_file (keyfile, keyfile_path, G_KEY_FILE_NONE, &error);
+ g_assert_no_error (error);
-+ accepted_diff = g_key_file_get_uint64 (keyfile, "reftest", "accepted-diff-level", NULL);
-+ g_test_message ("Maximum difference accepted: %" G_GUINT64_FORMAT " levels", accepted_diff);
-+ accepted_pixels = g_key_file_get_uint64 (keyfile, "reftest", "accepted-diff-pixels", NULL);
-+ g_test_message ("Different pixels accepted: %" G_GUINT64_FORMAT, accepted_pixels);
+ tolerated_diff = g_key_file_get_uint64 (keyfile, "reftest", "tolerated-diff-level", NULL);
+ g_test_message ("Maximum difference tolerated: %" G_GUINT64_FORMAT " levels", tolerated_diff);
+ tolerated_pixels = g_key_file_get_uint64 (keyfile, "reftest", "tolerated-diff-pixels", NULL);
+
g_test_message ("%u (out of %u) pixels differ from reference by up to %u levels",
pixels_changed, pixels, max_diff);
-- save_image (diff_image, ui_file, ".diff.png");
-- g_test_fail ();
+
-+ if (max_diff > accepted_diff || pixels_changed > accepted_pixels)
-+ save_image (diff_image, ui_file, ".diff.png");
+ save_image (diff_image, ui_file, ".diff.png");
+- g_test_fail ();
+
-+ if (max_diff <= accepted_diff && pixels_changed <= accepted_pixels)
-+ g_test_message ("differences are within acceptable range");
-+ else if (max_diff <= tolerated_diff && pixels_changed <= tolerated_pixels)
-+ g_test_incomplete ("not right, but close enough");
++ if (max_diff <= tolerated_diff && pixels_changed <= tolerated_pixels)
++ g_test_incomplete ("not right, but close enough?");
+ else
+ g_test_fail ();
+